package muhnes.sizoo.consulta;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Fuente implements Serializable, IConsultable {

    private String id;
    private String valor;
    private String nombre;
    private String descripcion;
    private TipoFuente tipo;
    private List<Campo> campos;
    private Map<String,Referencia> referencias;

    public Fuente() {
        campos = new ArrayList<Campo>();
        referencias = new HashMap<String,Referencia>();
    }

    public Fuente(String id, String valor, String nombre, String descripcion, TipoFuente tipo) {
        this.id = id;
        this.valor = valor;
        this.nombre = nombre;
        this.descripcion = descripcion;
        this.tipo = tipo;
        this.campos = new ArrayList<Campo>();
        this.referencias = new HashMap<String,Referencia>();
    }

    public Fuente(String id, String valor, String nombre, String descripcion, TipoFuente tipo, List<Campo> campos, Map<String,Referencia> referencias) {
        this.id = id;
        this.valor = valor;
        this.nombre = nombre;
        this.descripcion = descripcion;
        this.tipo = tipo;
        this.campos = campos;
        this.referencias = referencias;
    }

    public List<Campo> getCampos() {
        return campos;
    }

    public String getId() {
        return id;
    }

    public String getNombre() {
        return nombre;
    }
    
    public String getDescripcion() {
        return descripcion;
    }
    
    public Map<String,Referencia> getReferencias() {
        return referencias;
    }

    public TipoFuente getTipo() {
        return tipo;
    }

    public String getValor() {
        return valor;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Fuente other = (Fuente) obj;
        if ((this.id == null) ? (other.id != null) : !this.id.equals(other.id)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 29 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "Fuente{" + "id=" + id + ", valor=" + valor + ", nombre=" + nombre + ", descripcion=" + descripcion +", tipo=" + tipo + ", campos=" + campos + '}';
    }

    @Override
    public String getValorConsultable() {
        return valor;
    }
    
}
